/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import Modelo.Cadastro;
import Utilitarios.ConectarMySQL;
import java.sql.*;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 * @author everson
 */
public class DAOCadastro {
    
    private ConectarMySQL co = ConectarMySQL.getInstance();
    private String sql = "";

    public DAOCadastro(ConectarMySQL conCadastro) {
        this.co = conCadastro;
    }

    //Medoto para listar todos os setores
    public ArrayList list() throws SQLException {
    ArrayList list = new ArrayList();
    Connection conCadastro = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    ResultSet rs2 = null;
    
    try {
      conCadastro = co.getConexao();
      String sql = "select INTERESSADOS.ID, INTERESSADOS.COD_SIAFI, INTERESSADOS.TIPO, "+
                          //CADASTRODCF.CPF_CNPJ, "
                           "case INTERESSADOS.tipo "+
                               "when '1' then substring(INTERESSADOS.cpf_cnpj from 1 for 3)||'.'||substring(INTERESSADOS.cpf_cnpj from 4 for 3)||'.'|| "+
                                             "substring(INTERESSADOS.cpf_cnpj from 7 for 3)||'-'||substring(INTERESSADOS.cpf_cnpj from 10 for 2) "+
                                "when '2' then substring(INTERESSADOS.cpf_cnpj from 1 for 2)||'.'||substring(INTERESSADOS.cpf_cnpj from 3 for 3)||'.'|| "+
                                              "substring(INTERESSADOS.cpf_cnpj from 6 for 3)||'/'||substring(INTERESSADOS.cpf_cnpj from 9 for 4)||'-'|| "+
                                              "substring(INTERESSADOS.cpf_cnpj from 13 for 2) "+
                           "end "+
                           "CPFCNPJ, "
                          +"INTERESSADOS.NOME_RAZAO, INTERESSADOS.ENDERECO,  INTERESSADOS.NUMERO, "
                          +"INTERESSADOS.BAIRRO,     INTERESSADOS.CIDADE,    INTERESSADOS.FONE_1,   INTERESSADOS.FONE_2, "
                          +"CIDADES.DESCRICAO, CIDADES.ESTADO "
                   +"from INTERESSADOS, CIDADES "
                   +"where INTERESSADOS.CIDADE=CIDADES.ID "
                   +"order by NOME_RAZAO ";

      pstmt = conCadastro.prepareStatement(sql);
      rs = pstmt.executeQuery();
      while(rs.next()) {
        Cadastro s = new Cadastro();

        s.setId(rs.getInt(1));
        s.setCod_siafi(rs.getInt(2));
        s.setTipo(rs.getString(3));
        s.setCpf_cnpj(rs.getString(4));
        
        s.setNome_razao(rs.getString(5));
        s.setEndereco(rs.getString(6));
        s.setNumero(rs.getString(7));
        
        s.setBairro(rs.getString(8));
        s.setCidade(rs.getInt(9));
        s.setFone_1(rs.getString(10));
        s.setFone_2(rs.getString(11));
        
        s.setDescCidade(rs.getString(12));
        s.setDescEstado(rs.getString(13));

        list.add(s);
        
      }
      
      rs.close();
      pstmt.close();
    } catch (SQLException e) {
      rs.close();
      pstmt.close();
      conCadastro.rollback();
      e.printStackTrace();
    } finally {
    	co.desConecta(conCadastro);
    }
    return list;
  }
    
    public int insere(Cadastro cadastro) throws SQLException {
       PreparedStatement pstmt = null;
       Connection conCadastro = null;
       int a = 0;
       sql = "insert into INTERESSADOS (TIPO, CPF_CNPJ, NOME_RAZAO, "
                         + "COD_SIAFI, ENDERECO, NUMERO,     BAIRRO, "
                         + "CIDADE,    FONE_1,   FONE_2) "
                         + "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

       try {
       conCadastro = co.getConexao();
       pstmt = conCadastro.prepareStatement(sql);       
       pstmt.setString(1, cadastro.getTipo());
       pstmt.setString(2, cadastro.getCpf_cnpj());
       pstmt.setString(3, cadastro.getNome_razao());
       pstmt.setInt(4, cadastro.getCod_siafi());
       pstmt.setString(5, cadastro.getEndereco());
       pstmt.setString(6, cadastro.getNumero());
       pstmt.setString(7, cadastro.getBairro());
       pstmt.setInt(8, cadastro.getCidade());
       pstmt.setString(9, cadastro.getFone_1());
       pstmt.setString(10, cadastro.getFone_2());
       
       a = pstmt.executeUpdate();
       pstmt.close();
       return a;
       } catch (SQLException sqle) {
         JOptionPane.showMessageDialog(null,"CNPJ ou CPF já Cadastrado no Sistema. Favor Verifique!!!");
         sqle.printStackTrace();
         throw sqle;
       } finally {
    	 co.desConecta(conCadastro);
       }
    }

    public int altera(Cadastro cadastro) throws SQLException {
       PreparedStatement pstmt = null;
       Connection conCadastro = null;
       int a = 0;
       sql = "update INTERESSADOS set TIPO = ?, CPF_CNPJ = ?, NOME_RAZAO = ?, COD_SIAFI = ?, "
                                  + "ENDERECO = ?, NUMERO = ?, BAIRRO = ?, "
                                  + "CIDADE = ?, FONE_1 = ?, FONE_2 = ? where ID = ?";

       try {
       conCadastro = co.getConexao();
       pstmt = conCadastro.prepareStatement(sql);       
       pstmt.setString(1, cadastro.getTipo());
       pstmt.setString(2, cadastro.getCpf_cnpj());
       pstmt.setString(3, cadastro.getNome_razao());
       pstmt.setInt(4, cadastro.getCod_siafi());
       pstmt.setString(5, cadastro.getEndereco());
       pstmt.setString(6, cadastro.getNumero());
       pstmt.setString(7, cadastro.getBairro());
       pstmt.setInt(8, cadastro.getCidade());
       pstmt.setString(9, cadastro.getFone_1());
       pstmt.setString(10, cadastro.getFone_2());
       pstmt.setInt(11, cadastro.getId());
       
       a = pstmt.executeUpdate();
       pstmt.close();
       return a;
       } catch (SQLException sqle) {
         sqle.printStackTrace();
         throw sqle;
       } finally {
    	 co.desConecta(conCadastro);
       }
    }

    public int exclui(Cadastro cadastro) throws SQLException {
       int a = 0;
       sql = "DELETE from INTERESSADOS where ID = ?";
       Connection conCadastro = null;
       PreparedStatement pstmt = null;
       try {
          conCadastro = co.getConexao();
          pstmt = conCadastro.prepareStatement(sql);
          pstmt.setInt(1, cadastro.getId());
          a = pstmt.executeUpdate();
          pstmt.close();
          return a;
       } catch (SQLException sqle) {
          sqle.printStackTrace();
          throw sqle;
       } finally {
    	  co.desConecta(conCadastro);
       }
    }

    public ArrayList listFiltro(String qualFiltro) throws SQLException {
    ArrayList list = new ArrayList();
    Connection conCadastro = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    
    try {
      conCadastro = co.getConexao();
      String sql = "select ID, COD_SIAFI, "+
                   //CPF_CNPJ, "
                   "case INTERESSADOS.tipo "+
                         "when '1' then substring(INTERESSADOS.cpf_cnpj from 1 for 3)||'.'||substring(INTERESSADOS.cpf_cnpj from 4 for 3)||'.'|| "+
                                       "substring(INTERESSADOS.cpf_cnpj from 7 for 3)||'-'||substring(INTERESSADOS.cpf_cnpj from 10 for 2) "+
                         "when '2' then substring(INTERESSADOS.cpf_cnpj from 1 for 2)||'.'||substring(INTERESSADOS.cpf_cnpj from 3 for 3)||'.'|| "+
                                       "substring(INTERESSADOS.cpf_cnpj from 6 for 3)||'/'||substring(INTERESSADOS.cpf_cnpj from 9 for 4)||'-'|| "+
                                       "substring(INTERESSADOS.cpf_cnpj from 13 for 2) "+
                   "end "+
                   "CPFCNPJ, "
                   +"NOME_RAZAO from INTERESSADOS"+qualFiltro
                   +"order by NOME_RAZAO";

      pstmt = conCadastro.prepareStatement(sql);
      rs = pstmt.executeQuery();
      while(rs.next()) {
        Cadastro s = new Cadastro();

        s.setId(rs.getInt(1));
        s.setCod_siafi(rs.getInt(2));
        s.setCpf_cnpj(rs.getString(3));
        s.setNome_razao(rs.getString(4));

        list.add(s);
      }
      rs.close();
      pstmt.close();
    } catch (SQLException e) {
      rs.close();
      pstmt.close();
      conCadastro.rollback();
      e.printStackTrace();
    } finally {
    	co.desConecta(conCadastro);
    }
    return list;
  }

    public boolean temCadastro(String jaTemCadastro) throws SQLException {
       int valSET;
       boolean a = true;
       sql = "select COUNT(*) AS qdade from INTERESSADOS where CPF_CNPJ = '"+jaTemCadastro+"'";
       Connection conCadastro = null;
       PreparedStatement pstmt = null;
       ResultSet rs = null;
       try {
          conCadastro = co.getConexao();
          pstmt = conCadastro.prepareStatement(sql);
          rs = pstmt.executeQuery();

          valSET = 0;
          if (rs.next())
          {  
             valSET = rs.getInt("qdade");
          }
          if (valSET == 0)
          { 
             a = false;
          }    
          pstmt.close();
          return a;
       } catch (SQLException sqle) {
          sqle.printStackTrace();
          throw sqle;
       } finally {
    	  co.desConecta(conCadastro);
       }
    }
    
}
